package ljl.alg.wangzheng_camp.round1.array_and_list;

import commons.ListNode;

public class _offer_22_last_kth {
    
    // 没说 k 是不是在范围内
    // 1 2 3
    public ListNode getKthFromEnd(ListNode head, int k) {
        ListNode fast = head, slow = head;
        // fast 走 k 步，则 fast 为 null 时，slow 就是倒数第 k
        /*
        * 我有点不太明白
        * fast 长度是 k
        * fast 长度消耗完了，slow 就成 k 了，先这么理解把
        * */
        while (fast != null && k-- > 0) {
            fast = fast.next;
        }
        if (k > 0) return null;
        while (fast != null) {
            fast = fast.next;
            slow = slow.next;
        }
        return slow;
    }
}
